package main

import (
	"fmt"

)

func main() {

	// flag := true
	// if flag {
	// 	fmt.Println("flag=true")
	// }
	// 条件表达式
	age := 30
	if age>20 {
		fmt.Println("成年人")
	}

	// if语句的另一个写法
	if age :=34;age >20{
		fmt.Println("成年人1")
	}

	// 输入一个成绩
	var grade =93
	if(grade >90){
		fmt.Println("A")
	}else if(grade >75){
		fmt.Println("B")
	}else{
		fmt.Println("C")
	}

	if score := 75; score >= 90 {
		fmt.Println("A")
	} else if score > 75 {
		fmt.Println("B")
	} else {
		fmt.Println("C")
	}

	// if else注意的细节 {}不能省略
	// age :=30
	// if age>20
	// fmt.Println("成年人")

	// //
	// var  age = 23
	// if age>20{
	// 	fmt.Println("成年人")
	// }else{
	// 	fmt.Println("未成年")
	// }

	// 求两个数的最大值
	// var a =63
	// var b=83
	// var max int
	// if a>b {
	// 	max=a
	// }else{
	// 	max=b
	// }
	// fmt.Println("a和b的最大值是",max)
	// // for循环
	// // i++每次循环最后执行
	// for i:=0;i<10;i++{
	// 	fmt.Println(i)
	// }
	// // for循环的初始语句可以被忽略但是初始后的分号必须要写
	// i :=1
	// for ; i<10;i++{
	// 	fmt.Println(i)
	// }
	// // 初始化语句和结束语句都可以去掉  写循环的时候注意死循环
	// i :=1
	// for i <10 {
	// 	fmt.Println(i)
	// 	i++
	// }

	// 无限循环
	// golang中没有while循环
	//  i :=1
	// for {
	// 	if i<=10 {
	// 		fmt.Println(i)
	// 	}

	// 	}else {
	// 		break  //break表示跳出循环 结束执行
	// 	}
	// 	i++
	// }

	// 打印0-50所有的偶数
	// for i :=0;i<=50;i++{
	// 	if i%2==0 {
	// 		fmt.Println(i)
	// 	}
	// }
	// // 求1+2+3+...+100的和
	// var  sum int
	// for i:=1;i<=100;i++{
	// 	sum +=i
	// }
	// fmt.Println("1-100的和为:",sum)

	// 3 打印1-100之间所有是9的倍数的整数的个数及总和
	// var k =0
	// var sum=0
	// for i:=1;i<=100;i++{
	// 	if i%9 == 0 {
	// 		sum +=i
	// 		k++
	// 	}
	// }
	// fmt.Println("k的个数为%d 总和为",k,sum)

	// 计算5的阶乘
	// var sum=1
	// for i:=1 ;i<=5;i++{
	// 	sum *=i
	// }
	// fmt.Println(sum)

	// 打印一个矩形 for循环的嵌套

	// for i:=1;i<=12;i++{
	// 	fmt.Print("*")
	// 	if i%4==0{
	// 		fmt.Println("")
	// 	}
	// }

	// for循环的嵌套
	// var row = 5
	// var column = 8
	// for i := 0; i < row; i++ {
	// 	for j := 0; j < column; j++ {
	// 		fmt.Print("*")
	// 	}
	// 	fmt.Println("")
	// }

	// // 打印三角形
	//  row :=5
	// for i := 1; i <= row; i++ {
	// 	for j:=1;j<=i;j++{
	// 		fmt.Printf("*")
	// 	}
	// 	fmt.Println("")
	// }

	// 打印九九乘法表
	// row :=9
	// // column :=9
	// for i:=1;i<=row;i++{
	// 	for j:=1;j<=i;j++{
	// 		fmt.Printf("%d*%d=%v\t",i,j,i*j)
	// 	}
	// 	fmt.Print("\n")
	// }

	// 汉字默认是utf-8
	// var str ="你好golang"
	// for key,value :=range str{
	// 	fmt.Printf("key=%d\n",key,"value=%c\n",value)
	// }
	// var arr=[]string{"php","java","node","golang"}
	// for i :=0;i<len(arr);i++{
	// 	fmt.Println(arr[i])
	// // }
	// var arr=[]string{"php","java","node","golang"}
	// for _,value := range arr{
	// 	fmt.Println(value)
	// }

	// switch case
	// 
	// var ext =".html"
	// if ext ==".html"{
	// 	fmt.Println("text/html")
	// }else if ext ==".css"{
	// 	fmt.Println("text/css")
	// }else if ext==".js"{
	// 	fmt.Println("text/javaScript")
	// }else{
	// 	fmt.Println("找不到此后缀")
	// }
	// // switchcase 基本使用
	// var extname=".html"
	// switch extname{
	// case ".html":
	// 	fmt.Println("text/html")
	// 	break
	// case ".css":
	// 	fmt.Println("text/css")
	// 	break
	// case ".js":
	// 	fmt.Println("text/javaScript")
	// 	break
	// default:
	// 	fmt.Println("找不到此后缀")

	// }
	// switch case的另一种写法

	// switch extname :=".html";extname{
	// case ".html":
	// 	fmt.Println("text/html")
	// 	break
	// case ".css":
	// 	fmt.Println("text/css")
	// 	break
	// case ".js":
	// 	fmt.Println("text/javaScript")
	// 	break
	// default:
	// 	fmt.Println("找不到此后缀")
	// }
	// 一个分支可以有多个值 多个case值中间使用英文逗号分隔

	// var n=5
	// switch n{
	// case 1,3,5,7,9:
	// 	fmt.Println("奇数")
	// 	break
	// case 2,4,6,8,10:
	// 	fmt.Println("偶数")
	// 	break 
	// }

		
		// switch score :="D";score {
		// case "A","B","C":
		// 	fmt.Println("及格")
		// case "D":
		// 	fmt.Println("不及格")
		// }
	// switch分支可以使用表达式
	// var age =30
	// switch {
	// case age < 20:
	// 	fmt.Println("好好学习")
	// case age>=24 &&age <=60:
	// 	fmt.Println("好好赚钱")
	// case age>66:
	// 	fmt.Println("注意身体")
	// default:
	// 	fmt.Println("输入错误")
	// }
	
	// fallthrough语法可以执行满足条件的case的下一个case 是为了兼容C语言的case设计 switch穿透问题 
	// 
	// age:=30
	// switch {
	// case age < 20:
	// 	fmt.Println("好好学习")
	// case age>=24 &&age <=60:
	// 	fmt.Println("好好赚钱")
	// 	fallthrough
	// case age>66:
	// 	fmt.Println("注意身体")
	// default:
	// 	fmt.Println("输入错误")
	// }
// break
// 当i=2的时候跳出当前循环
// 		for i := 0; i <= 10; i++ {
// 			if(i==2){
// 				break  
// 			}
// 			fmt.Println(i)
// 		}
// 		fmt.Println("继续执行")

		// 在多重循环中 可以用标号label标出想break的循环
// 2 表示i=2的时候跳出当前循环
// label:
// 		for i:=0;i<2;i++{
// 			for j:=0;j<10;j++{
// 				if (j == 3){
// 					break label
// 				}
// 				fmt.Printf("i=%v j=%v\n",i,j)
// 			}
// 		}

// continue语句可以结束当前循环 
		// for i:=1;i<=10;i++{
		// 	if i ==3{
		// 		continue  //跳过当前循环继续执行下次循环
		// 	}
		// 	fmt.Println(i)
		// }

		// 在continue语句后面添加标签时，表示开始标签对应的循环

	//  for i:=0;i<2;i++{
	// 	for j:=0;j<10;j++{
	// 		if j==3{
	// 			continue
	// 		}
	// 		fmt.Printf("i=%v j=%v\n",i,j)
	// 	}
	//  }
	// label2:
	//  for i:=0;i<2;i++{
	// 	for j:=0;j<10;j++{
	// 		if j==3{
	// 			continue label2
	// 		}
	// 		fmt.Printf("i=%v j=%v\n",i,j)
	// 	}
	//  }

	// go to标签 跳到指定标签的位置继续执行
	var n =30
	if n>24{
		fmt.Printf("成年人")
		goto label3
	}

	fmt.Println("aaa")
	fmt.Println("bbb")
label3:
	fmt.Println("CCC")
	fmt.Println("DDD")
	
}
